package top.rainbowecho.upload.application.command;

import org.springframework.web.multipart.MultipartFile;
import top.rainbowecho.upload.domain.model.fs.strategy.ImageUploadStrategy;
import top.rainbowecho.upload.domain.model.fs.vo.UploadResult;

import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;

/**
 * @author rainbow
 * @since 2019/12/6 18:49
 */
public interface BlogFsService {
    /**
     * 上传文件到fs
     *
     * @param file 上传的文件
     * @param username 上传的用户名
     * @param uploadStrategy 文件异步上传策略，选择进行普通图片上传还是缩略图上传
     * @return 用户访问文件的uri路径，如果开启了token，则路径中携带token和ts参数
     * @throws IOException 文件读取失败
     */
    UploadResult uploadFile(MultipartFile file, String username, ImageUploadStrategy uploadStrategy) throws IOException, InterruptedException, ExecutionException, TimeoutException;

    /**
     * 根据文件存放的全路径重新生成token
     *
     * @param storePath 文件的全路径
     * @return 新的携带token和ts参数的uri路径
     */
    String generateToken(String storePath);

}
